#ifndef MONITOR_H
#define MONITOR_H

#include <QDialog>
#include <QApplication>
#include <QLabel>
#include <QUdpSocket>
#include <QImage>
#include <QTimer>
#include <QBuffer>
#include <QImageReader>
#include <QPixmap>
#include <stdint.h>
#include <QMessageBox>
#include <QFileDialog>
#include <QFileInfo>
#include <QFile>
#include <QDateTime>
#include <QDebug>
#include <QHostAddress>
#include <opencv2/opencv.hpp>
#include <vector>

namespace Ui {
class Monitor;
}
class Monitor : public QDialog
{
    Q_OBJECT
public:
    // 网络配置
//  QString host = "192.168.51.136";// 默认主机地址

    QString host = "192.168.51.62";// 默认主机地址


    quint16 port = 8777;// 默认端口号
    QHostAddress hostaddr;// 主机地址对象
    // 图像相关
    QImage image;// 存储当前帧图像数据
    QPixmap pixmap;// 用于界面显示的像素图
    explicit Monitor(QWidget *parent = 0);// 构造函数
    // 视频流处理相关
    int m_expectedSize;// 预期帧大小
    int m_receivedSize;// 已接收数据大小
    int flag_lable = 0;// 显示控制标志位
    // 文件操作
    QString photosavepath;// 截图保存路径
    QByteArray videoBuffer;// 视频帧缓冲区
    QByteArray currrentframeData; // 当前帧数据
    QByteArray datagram;// UDP 数据报容器
    QByteArray datasend;// 发送数据缓冲区
    QFile   file;// 文件操作对象
    // 相册功能相关
    QStringList currentPhotoList;  // 存储当前目录下图片路径列表
    int currentPhotoIndex = -1;    // 当前显示图片索引

    void loadPhotoList();  // 加载图片列表
    void updatePhotoDisplay();//更新图片显示
    ~Monitor();
private:
    Ui::Monitor *ui;// UI 指针
    QUdpSocket *udpSocket;// UDP 套接字
    QTimer *frameTimer;// 帧处理定时器
    bool isFrameStart;// 帧开始标志
    cv::CascadeClassifier faceCascade;  // 人脸检测分类器
    std::vector<cv::Rect> faces;        // 存储检测到的人脸位置
    bool isFaceDetectionEnabled = true; // 人脸检测开关

private slots:
    void openMonitorSlot();//打开关闭监控
    void screenshotSlot();//截图操作
    //    void videoSlot();//录像
    void photoSaveSlot();//图片保存路径
    void readPendingDatagrams();// 读取接收到的数据报
    void timerProcessVideoFrame(const QByteArray &frameData);// 定时处理视频帧
    void photoLastSlot();//相册上一张
    void photoNextSlot();//相册下一张

};
#endif // MONITOR_H
